package main
import (
	"fmt"
)
//接口的使用与定义
//只要实现了USB接口的方法：“也就是说实现了USB接口声明的【所有】方法”
//接口可以定义一组方法，但是这些不需要实现，并且接口不能包含任何变量，哪个结构体实现该接口就要写出接口 [所有] 方法的具体实现
type USB interface{ //接口的定义
	Start()		//接口的两个方法！
	Stop()
}
type USB2 interface{ //接口的定义  由于与USB有一样的方法，所以下面的结构体同时也实现了USB2
	Start()		//接口的两个方法！
	Stop()
}
type Phone struct{

}
//让该结构体Phone实现接口的方法
func (p Phone) Start(){
	fmt.Println("手机开始工作...")
}
func (p Phone) Stop(){
	fmt.Println("手机停止工作...")
}
type Camera struct{

}
//让该结构体Camera实现接口的方法
func (c Camera) Start(){
	fmt.Println("相机开始工作...")
}
func (c Camera) Stop(){
	fmt.Println("相机停止工作...")
}

//计算机
type Computer struct{

}
//编写一个方法，可以接收USB接口类型的的参数
//只要实现了USB接口的方法，“也就是说实现了USB接口声明的【所有】方法”
func (c Computer)Working(usb USB){    //体现出了多态
	//通过接口变量来调用Start和Stop接口的方法
	usb.Start()
	usb.Stop()
}

func main(){
	computer := Computer{}
	phone := Phone{}
	camera := Camera{}

	//关键点
	computer.Working(phone)  //因为phone实现了USB接口，所有可以直接用phone实例来作为usb参数
	computer.Working(camera)
}
